#include <iostream>
#include <vector>

using namespace std;
// 443.压缩字符串
// 给你一个字符数组 chars ，请使用下述算法压缩：
// 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 ：
// 如果这一组长度为 1 ，则将字符追加到 s 中。
// 否则，需要向 s 追加字符，后跟这一组的长度。

class Solution {
public:
    int compress(vector<char>& chars) {
        int n = chars.size();
        if(n == 0 || n == 1)
            return n;

        int i = 0, cnt, k = 0;  // i 用来遍历字符数组; cnt用来记录重复字符的个数; k是新表的长度
        char ch;
        while(i < chars.size()) {
            ch = chars[i];
            cnt = 1;
            i++;
            while(i < chars.size() && ch == chars[i]) {
                cnt++;
                i++;
            }

            // 得到了当前字符ch的重复数cnt
            if(cnt == 1)
                chars[k++] = ch;
            else {
                chars[k++] = ch;
                string tmp = to_string(cnt);
                for(const char& c : tmp)
                    chars[k++] = c;
            }
        }
        return k;
    }
};
int main() {
    vector<char> str1{'a','a','b','b','c','c','c'};
    vector<char> vec1(str1);
    int len1 = Solution().compress(vec1);
    for(int i = 0 ; i < len1 ; i ++)
        cout << vec1[i] << " ";
    cout << endl;
    // ---
    vector<char> str2{'a'};
    vector<char> vec2(str2);
    int len2 = Solution().compress(vec2);
    for(int i = 0 ; i < len2 ; i ++)
        cout << vec2[i] << " ";
    cout << endl;

    // ---

    vector<char> str3{'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'};
    vector<char> vec3(str3);
    int len3 = Solution().compress(vec3);
    for(int i = 0 ; i < len3 ; i ++)
        cout << vec3[i] << " ";
    cout << endl;

    return 0;
}
